package com.df.library.net.condition;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;

/**
 * 协议判断，一般用于动态切换协议的服务中，比如网关，既需要支持http又需要支持自定义的tcp协议等
 */
public interface IProtocolPredicate {

    /**
     * 检查当前消息是否是指定的协议格式
     * @param ctx
     * @param msg
     * @return
     */
    boolean check(ChannelHandlerContext ctx, ByteBuf msg);

    /**
     * 确定协议后，对channel初始化，一般是移除ProtocolSelectHandler和加入协议对应的handler
     * @param ctx
     */
    void channelInit(ChannelHandlerContext ctx);
}
